#include "Vue.h"

t_motte** Vue_init() {
	/* S'occupe de l'initialisation de la matrice de pMotte */
   	int eLigne, eColonne;

	t_motte** pMotte;
	/* Allocation mémoire pour le tableau de sous-tableaux */
	pMotte = (t_motte**) malloc(elmax * sizeof(t_motte*));

	/* Allocation mémoire pour chaque sous-tableau de de structure */
	for (eLigne = 0; eLigne < elmax; eLigne++)
		pMotte[eLigne] = (t_motte*) malloc(ecmax * sizeof(t_motte));


	for (eLigne = 0; eLigne < elmax; eLigne++){
		for (eColonne = 0; eColonne < ecmax; eColonne++){
			pMotte[eLigne][eColonne].eEtatterre=Plein;
			pMotte[eLigne][eColonne].Nourriture=Vide;
			pMotte[eLigne][eColonne].ptNourriture=0;
			pMotte[eLigne][eColonne].eTaupes=0;
		}
	}	

	Vue_bord(pMotte);

	return pMotte;

}

void Vue_bord(t_motte** pMotte) {
	/* Fait les bords de la scène de 0 à lmax et de 0 à cmax*/
   	int eLigne, eColonne;

	for(eColonne=0;eColonne<ecmax;eColonne++) {
		pMotte[0][eColonne].eEtatterre=Pierre;
		pMotte[elmax-1][eColonne].eEtatterre=Pierre;
	}
	for(eLigne=0;eLigne<elmax;eLigne++) {
		pMotte[eLigne][0].eEtatterre=Pierre;
		pMotte[eLigne][ecmax-1].eEtatterre=Pierre;
	}
}

int bRocherVerifier(t_motte** pMotte, int eLigne, int eColonne){
	if((pMotte[eLigne][eColonne].eTaupes>0) || (pMotte[eLigne][eColonne].eEtatterre==Pierre) || (pMotte[eLigne+1][eColonne].eEtatterre==Pierre) || (pMotte[eLigne-1][eColonne].eEtatterre==Pierre) || (pMotte[eLigne][eColonne+1].eEtatterre==Pierre)  || (pMotte[eLigne][eColonne-1].eEtatterre==Pierre) || (pMotte[eLigne+1][eColonne+1].eEtatterre==Pierre) || (pMotte[eLigne-1][eColonne-1].eEtatterre==Pierre) || (pMotte[eLigne+1][eColonne-1].eEtatterre==Pierre) || (pMotte[eLigne-1][eColonne+1].eEtatterre==Pierre))	{
		return 0;
	}
	else
		return 1;
}		
		
void Vue_Rocher_placer(t_motte** pMotte){
	/* Fonction qui va placer un nombre aléatoire de rochers à des endroits aléatoires de la matrice */
	int eNbrRocher = eHasard ((elmax*ecmax)/20, (elmax*ecmax)/15);
	int ePosX;
	int ePosY;
	int eRocher_Incremente;
	
	for(eRocher_Incremente=0;eRocher_Incremente<eNbrRocher;eRocher_Incremente++){
		do{ 
			ePosX = eHasard (1, elmax-1);
			ePosY = eHasard (1, ecmax-1);
		}
		while(!bRocherVerifier(pMotte, ePosX, ePosY));
		pMotte[ePosX][ePosY].eEtatterre=Pierre;
	}
}	

void Vue_afficher(t_motte** pMotte, SDL_Surface* ecran) {
	/* Affiche le contenu de la scène */
   	int eLigne, eColonne;
	SDL_Rect position;

	for (eLigne = 0; eLigne < elmax; eLigne++){
		for (eColonne = 0; eColonne < ecmax; eColonne++){
			position.x = eColonne * TAILLE_BLOC;
			position.y = eLigne * TAILLE_BLOC;

			switch(pMotte[eLigne][eColonne].eEtatterre){
				case Pierre : 	SDL_BlitSurface(IMG_Load("./images/pierre.bmp"), NULL, ecran, &position);
							break;
				case Plein :	switch(pMotte[eLigne][eColonne].eTaupes){
							case 0 :	SDL_BlitSurface(IMG_Load("./images/plein.bmp"), NULL, ecran, &position);
									break;
							case 1 : 	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position); 
									break;
							case 2 :	SDL_BlitSurface(IMG_Load("./images/rattaupe2.bmp"), NULL, ecran, &position);
									break;
							case 3 :	SDL_BlitSurface(IMG_Load("./images/rattaupe3.bmp"), NULL, ecran, &position);
									break;
							default :	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
						}
						break;
				case Moyen :	switch(pMotte[eLigne][eColonne].eTaupes){
							case 0 :  SDL_BlitSurface(IMG_Load("./images/moyen.bmp"), NULL, ecran, &position);
									break;
							case 1 : 	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position); 
									break;
							case 2 :	SDL_BlitSurface(IMG_Load("./images/rattaupe2.bmp"), NULL, ecran, &position);
									break;
							case 3 :	SDL_BlitSurface(IMG_Load("./images/rattaupe3.bmp"), NULL, ecran, &position);
									break;
							default :	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
						}
						break;
				case Petit :	switch(pMotte[eLigne][eColonne].eTaupes){
							case 0 :  SDL_BlitSurface(IMG_Load("./images/petit.bmp"), NULL, ecran, &position);
									break;
							case 1 : 	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
							case 2 :	SDL_BlitSurface(IMG_Load("./images/rattaupe2.bmp"), NULL, ecran, &position);
									break;
							case 3 :	SDL_BlitSurface(IMG_Load("./images/rattaupe3.bmp"), NULL, ecran, &position);
									break;
							default :	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
						}
						break;
				case Rien :	switch(pMotte[eLigne][eColonne].eTaupes){
							case 0 : 	SDL_BlitSurface(IMG_Load("./images/vide.bmp"), NULL, ecran, &position);
									break;
							case 1 : 	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
							case 2 :	SDL_BlitSurface(IMG_Load("./images/rattaupe2.bmp"), NULL, ecran, &position);
									break;
							case 3 :	SDL_BlitSurface(IMG_Load("./images/rattaupe3.bmp"), NULL, ecran, &position);
									break;
							default :	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
						}
						break;
			}

		}
	}
}

void Vue_Mort(int ePosX, int ePosY, SDL_Surface* ecran){
	SDL_Rect position;
	position.x = ePosY * TAILLE_BLOC;
	position.y = ePosX * TAILLE_BLOC;
	SDL_BlitSurface(IMG_Load("./images/tetemort.bmp"), NULL, ecran, &position);
	SDL_Flip(ecran);
}

void Vue_Reproduction( int ePosX, int ePosY, SDL_Surface* ecran){
	SDL_Rect position;
	position.x = ePosY * TAILLE_BLOC;
	position.y = ePosX * TAILLE_BLOC;
	SDL_BlitSurface(IMG_Load("./images/coeur.bmp"), NULL, ecran, &position);
	SDL_Flip(ecran);
}

void Vue_Accouchement( int ePosX, int ePosY, SDL_Surface* ecran){
	SDL_Rect position;
	position.x = ePosY * TAILLE_BLOC;
	position.y = ePosX * TAILLE_BLOC;
	SDL_BlitSurface(IMG_Load("./images/biberon.bmp"), NULL, ecran, &position);
	SDL_Flip(ecran);
}

void Vue_Combat( int ePosX, int ePosY, SDL_Surface* ecran){
	SDL_Rect position;
	position.x = ePosY * TAILLE_BLOC;
	position.y = ePosX * TAILLE_BLOC;
	SDL_BlitSurface(IMG_Load("./images/fight.jpg"), NULL, ecran, &position);
	SDL_Flip(ecran);
}
